package dominio;

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

import org.junit.Before;
import org.junit.Test;

public class ZombieTest {

	private Zombie zombie;
	private Planta planta;
	private Fila fila;

	@Before
	public void setUp() throws Exception {
		zombie = new Zombie(10, 10);
		
		planta = new Planta("Planta1", 10, 10);
		
		planta = mock(Planta.class);
		when(planta.getPuntosDefensa()).thenReturn(1);
		when(planta.estaMuerta()).thenReturn(true);
		
		fila = mock(Fila.class);
		when(fila.hayPlantas()).thenReturn(true);
		when(fila.obtenerPrimeraPlantaAtacable()).thenReturn(planta);
		when(fila.puntosAtaquePlantas()).thenReturn(2);

	}

	@Test
	public void testAtacarPlanta() {
		
		zombie.atacarPlanta(planta);
		
		verify(planta).quitarPuntosDef(zombie.getPuntosAtaque());
	}

	@Test
	public void testAtacarFila() {
		// Vida inicial del zombie antes de pelear
		assertEquals(zombie.getPuntosDefensa(), zombie.getVidaInicial());
		
		// Se produce la pelea
		zombie.atacarFila(fila); 
		
		// La planta es atacada 5 veces en este caso
		verify(planta, times(5)).quitarPuntosDef(zombie.getPuntosAtaque());
		
		// La vida del zombie disminuyo
		assertTrue(zombie.getPuntosDefensa() < zombie.getVidaInicial());
	}
}
